home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / ADDON.PAK / FILETEST.CPP < prev    next >
C/C++ Source or Header  |  1997-05-06  |  6KB  |  223 lines

  1. /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2.  
  3.   filetest.cpp
  4.   Created: 10/24/95
  5.   Copyright (c) 1995, Borland International
  6.   $Revision:   1.18  $  
  7.    
  8. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/  
  9. #ifndef __AOEXPCH_H
  10.   #include "aoexpch.h"
  11. #endif
  12. #pragma hdrstop
  13.  
  14. #include "filetest.h"
  15.  
  16. //.............................................................................
  17. FileTestA::FileTestA() {
  18.   _vFile = NULL;
  19. }
  20. //.............................................................................
  21. FileTestA::~FileTestA() {
  22.   UnInit();
  23. }
  24. //.............................................................................
  25. BOOL FileTestA::Init() {
  26.   OutStr( "FileTestA::Init()" );
  27.   if ( !_vFile ) {
  28.     _vFile = ::CreateVirtualFile();
  29.   }
  30.   return ( _vFile != NULL );
  31. }
  32. //.............................................................................
  33. void FileTestA::UnInit() {
  34.   OutStr( "FileTestA::UnInit()" );
  35.   if ( _vFile ) {
  36.     _vFile->Release();
  37.     _vFile = NULL;
  38.   }
  39. }
  40. //.............................................................................
  41. const char * FileTestA::GetName() {
  42.   return "File Test A";
  43. }
  44. //.............................................................................
  45. const char * FileTestA::GetTestDescription( int testNum ) {
  46.   switch ( testNum ) {
  47.     case 1:
  48.       return "Make a new file called testfile.txt";
  49.     case 2:
  50.       return "Read \"paint.cpp\" (must live in bc5\\examples\\owl\\paint directory - can be in edit buffer)";
  51.     case 3:
  52.       return "Read/Write from/to testfile.txt";
  53.   }
  54.   return "This test not implemented.";
  55. }  
  56. //.............................................................................
  57. IPolyString * FileTestA::getReadFilePath() {
  58.   char buf[ 1000 ];
  59.   IIdeServer * ide = GetIdeServer();
  60.   IPolyString * rootDir = ide->ProductRootDirectory();
  61.   wsprintf( buf, "%s\\examples\\owl\\apps\\paint\\paint.cpp", rootDir->GetCstr() );
  62.   rootDir->Release();
  63.   ide->Release();
  64.   return ::MakePolyString( buf );
  65. }
  66. //.............................................................................
  67. bool FileTestA::compareFiles( IVirtualFile * reader ) {
  68.   bool ok = true;
  69.   const int bufsize = 4048;
  70.   OutStr( "Comaring files..." );
  71.   IVirtualFile * reader2 = ::CreateVirtualFile();
  72.   reader2->Init( MakePolyString( "filetest.txt" ) );
  73.   char buf1[ bufsize ];
  74.   char buf2[ bufsize ];
  75.   reader->Seek( 0, FILE_BEGIN );
  76.   if ( !reader2->Exists() || !reader2->Open( VFOM_Read ) ) {
  77.     ok = false;
  78.   }
  79.   while ( ok ) {
  80.     int num1 = reader->Read( buf1, bufsize );
  81.     int num2 = reader2->Read( buf2, bufsize );
  82.     if ( num1 != num2 ) {
  83.       ok = false;
  84.       break;
  85.     }
  86.     if ( 0 == num1 ) {
  87.       break;
  88.     }
  89.     char * x = buf1;
  90.     char * y = buf2;
  91.     while ( num1-- ) {
  92.       if ( *x != *y ) {
  93.         ok = false;
  94.         break;
  95.       }
  96.     }
  97.   }
  98.   OutStr( ok? "Compare OK." : "Compare failed!" );
  99.   reader2->Release();
  100.   return ok;
  101. }
  102. //.............................................................................
  103. bool FileTestA::testReadWrite() {
  104.   //
  105.   // Requires that test2 has been succesfully run.
  106.   //
  107.   bool ok = true;
  108.   IVirtualFile * file = ::CreateVirtualFile();
  109.   if ( !file ) {
  110.     return false;
  111.   }
  112.   file->Init( MakePolyString( "filetest.txt" ) );
  113.   if ( !file->Exists() ) {
  114.     ok = false;
  115.     OutStr( "Couldn't find filetest.txt" );
  116.   }
  117.   if ( ok && !file->Open( VFOM_ReadWrite ) ) {
  118.     ok = false;
  119.     OutStr( "Couldn't open filetest.txt" );
  120.   }
  121.   if ( ok ) {
  122.     char * buf2 = new char[ 10 ];
  123.     while ( 1 ) {
  124.       int numchars = file->Read( buf2, 10 );
  125.       file->Write( buf2, numchars );
  126.       if ( !numchars ) {
  127.         break;
  128.       }
  129.     }
  130.   }
  131.   file->Release();
  132.   return ok;
  133. }   
  134. //.............................................................................
  135. bool FileTestA::testRead() {
  136.   const int bufsize = 4048;
  137.   bool ok = true;
  138.   int count = 0;
  139.   IVirtualFile * reader = ::CreateVirtualFile();
  140.   if ( !reader ) {
  141.     return false;
  142.   }
  143.   IVirtualFile * writer = ::CreateVirtualFile();
  144.   if ( !writer ) {
  145.     reader->Release();
  146.     return false;
  147.   }
  148.   IPolyString * path = getReadFilePath();
  149.   reader->Init( path );
  150.   writer->Init( MakePolyString( "filetest.txt" ) );
  151.   if ( !writer->Open( VFOM_Create ) ) {
  152.     OutStr( "Couldn't create filetest.txt" );
  153.     ok = false;
  154.   }
  155.   if ( ok && !reader->Exists() ) {
  156.     OutStr( "Couldn't find paint.cpp" );
  157.     ok = false;
  158.   }
  159.   if ( ok && !reader->Open( VFOM_Read ) ) {
  160.     OutStr( "Couldn't open paint.cpp" );
  161.     ok = false;
  162.   }
  163.   if ( ok ) {
  164.     char * buf2 = new char[ bufsize ];
  165.     while ( 1 ) {
  166.       int numchars = reader->Read( buf2, bufsize );
  167.       if ( numchars ) {
  168.         count += numchars;
  169.         writer->Write( buf2, numchars );
  170.       }
  171.       else {
  172.         break;
  173.       }
  174.     }
  175.     delete [] buf2;             
  176.   }
  177.   writer->Release();
  178.   ok = compareFiles( reader );
  179.   reader->Release();
  180.   OutStr( FormatStr( "Test #2 %s. %d chars read", ok? "succeeded" : "failed", count ) );
  181.   return ok;
  182. }
  183. //.............................................................................
  184. void FileTestA::DoTest( int testNum ) {
  185.   if ( !_vFile ) {
  186.     OutStr( "Virtual file not initialized!" );
  187.     return;
  188.   }
  189.   switch ( testNum ) { 
  190.     case 1: {
  191.       OutStr ("Writing Hello World to file c:\\testfile.txt");
  192.       IPolyString *name = ::MakePolyString ( "c:\\TestFile.txt" );
  193.       if ( name ) {
  194.         _vFile->Init ( name );
  195.         _vFile->Open ( VFOM_Create );
  196.         if ( _vFile->Exists() ) {
  197.           _vFile->Write ( "Hello World", 11 );
  198.           _vFile->Close ();
  199.           OutStr ("Success!");
  200.         }
  201.         else {
  202.           OutStr ("Couldn't create a new file for writing");
  203.         }
  204.       }
  205.       else {
  206.         OutStr ("Couldn't make a PolyString");
  207.       }
  208.       break;
  209.     }
  210.     case 2:
  211.       testRead();
  212.       break;
  213.       
  214.     case 3:
  215.       testReadWrite();
  216.       break;
  217.  
  218.     default: {
  219.       OutStr( FormatStr( "Test #%d Not Implemented!", testNum ) );
  220.     }
  221.   }
  222. }
  223.